// src/types/sys/SysMenu.ts
// 菜单基础接口定义

// 添加菜单类型枚举
export enum MenuType {
  DIRECTORY = 1, // 目录
  MENU = 2,      // 菜单
  BUTTON = 3     // 按钮
}

export interface SysMenu {
  menu_id: number;          // 菜单ID
  menu_name: string;        // 菜单名称
  menu_code: string;        // 菜单编码
  parent_id?: number;       // 父级菜单ID
  menu_level: number;       // 菜单层级
  menu_path?: string;       // 菜单路径
  component?: string;       // 组件路径
  icon?: string;            // 菜单图标
  sort_order: number;       // 排序号
  is_active: boolean;       // 是否激活
  is_show?: number;         // 是否显示 (1:显示, 0:隐藏)
  description?: string;     // 描述
  created_at?: string;      // 创建时间
  updated_at?: string;      // 更新时间
  created_by?: string;      // 创建人
  updated_by?: string;      // 更新人
  is_deleted: boolean;      // 软删除标识
  menu_type?: MenuType;     // 菜单类型
}

// 菜单创建时的类型（不包含自动生成的字段）
export type SysMenuCreation = Omit<SysMenu, 'menu_id' | 'created_at' | 'updated_at' | 'is_deleted'>;

// 菜单更新时的类型（所有字段都是可选的）
export type SysMenuUpdate = Partial<SysMenu>;

// 菜单树结构类型
export interface SysMenuTree extends SysMenu {
  children?: SysMenuTree[];
}

// 菜单状态管理接口
export interface MenuState {
  menuList: SysMenu[];
  currentMenu: SysMenu | null;
  loading: boolean;
}

// 兼容旧的 MenuItem 接口定义
export interface MenuItem {
  menu_id: number;
  parent_id: number;
  menu_name: string;
  menu_code: string;
  menu_type: MenuType;
  icon?: string;
  path?: string;
  component?: string;
  sort_order: number;
  is_show: number;
  is_active: number;
  children?: MenuItem[];
  created_by?: string;
  created_at?: string;
  updated_by?: string;
  updated_at?: string;
}

// MenuItem 相关类型（用于向后兼容）
export type MenuItemCreation = Omit<MenuItem, 'menu_id' | 'created_at' | 'updated_at'>;
export type MenuItemUpdate = Partial<MenuItem>;